package org.bear.mario.Pojo;

import org.bear.mario.Running.BackGround;
import org.bear.mario.Running.StaticValue;

import java.awt.image.BufferedImage;

// 表示障碍物的类，实现了Runnable接口
public class Obstruction implements Runnable {
    private int x; // 障碍物的x坐标
    private int y; // 障碍物的y坐标
    private Thread t = new Thread(this); // 线程用于控制障碍物的运动
    private int type; // 障碍物的类型
    private int starttype; // 障碍物的初始类型
    private BufferedImage showImage = null; // 用于显示的图像
    private BackGround bg; // 关联的背景对象

    // 构造函数，初始化障碍物的坐标、类型和背景
    public Obstruction(int x, int y, int type, BackGround bg) {
        this.x = x;
        this.y = y;
        this.type = type;
        this.starttype = type;
        this.bg = bg;
        setImage();
        if (this.type == 11) {
            t.start(); // 启动线程控制运动
        }
    }

    // 重置障碍物到初始状态
    public void reset() {
        this.type = starttype;
        this.setImage();
    }

    // 设置障碍物的图像
    public void setImage() {
        showImage = StaticValue.allObstructionImage.get(type);
    }

    // 获取当前显示的图像
    public BufferedImage getShowImage() {
        return showImage;
    }

    // 获取障碍物的x坐标
    public int getX() {
        return x;
    }

    // 获取障碍物的y坐标
    public int getY() {
        return y;
    }

    // 获取障碍物的类型
    public int getType() {
        return type;
    }

    // 设置障碍物的类型
    public void setType(int type) {
        this.type = type;
    }

    // 运行方法，实现障碍物的运动逻辑
    public void run() {
        while (true) {
            if (this.bg.isOver()) {
                if (this.y < 420) {
                    this.y += 5; // 向下移动
                } else {
                    this.bg.setDown(true); // 设置背景向下
                }
            }
            try {
                Thread.sleep(50); // 线程休眠，控制运动速度
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
